package dao;

import org.apache.ibatis.annotations.Param;
import pojo.User;

import java.util.List;

public interface UserDao {

    // 定义行为  CRUD (Create, Read, Update, Delete)

    // 查询用户
    /**
     * 根据用户名、密码、偏移量和每页大小查询用户列表。
     * @param name 用户名
     * @param pass 密码
     * @param offset 偏移量
     * @param pageSize 每页大小
     * @return 用户列表
     */
    List<User> findAll(@Param("name") String name, @Param("pass") String pass, @Param("offset") int offset, @Param("pageSize") int pageSize);

    /**
     * 根据用户对象、偏移量和每页大小查询用户列表。
     * @param user 用户对象
     * @param offset 偏移量
     * @param pageSize 每页大小
     * @return 用户列表
     */
    List<User> findAll2(@Param("user") User user, @Param("offset") int offset, @Param("pageSize") int pageSize);

    // 删除用户
    /**
     * 根据用户ID删除用户。
     * @param id 用户ID
     * @return 影响的行数
     */
    int deleteUserById(int id);

    // 添加用户
    /**
     * 添加新用户。
     * @param user 用户对象
     * @return 影响的行数
     */
    int addUser(User user);

    // 根据ID查找用户
    /**
     * 根据用户ID查找用户。
     * @param id 用户ID
     * @return 用户对象
     */
    User findById(int id);

    // 更新用户
    /**
     * 更新用户信息。
     * @param user 用户对象
     * @return 影响的行数
     */
    int updateUser(User user);

    // 统计用户数量
    /**
     * 统计符合条件的用户数量。
     * @param user 用户对象，用于传递查询条件
     * @return 用户数量
     */
    int count(User user);

    // 用户登录
    /**
     * 验证用户登录。
     * @param user 用户对象，包含用户名和密码
     * @return 影响的行数，1表示登录成功，0表示登录失败
     */
    int login(User user);

    // 检查用户名是否唯一
    /**
     * 检查用户名是否已存在。
     * @param name 用户名
     * @return 用户数量，大于0表示用户名已存在，0表示用户名可用
     */
    int findUserByName(String name);
}
//这段代码定义了一个名为 UserDao 的接口，该接口用于与数据库进行交互，
// 执行与用户相关的各种操作。具体来说，这个接口定义了一系列方法，每个方法对应一个特定的数据库操作。
// 以下是这段代码的主要用途和功能：

//主要用途
//数据访问层（DAO）：
//UserDao 接口是数据访问层的一部分，负责与数据库进行交互，执行CRUD（创建、读取、更新、删除）操作以及其他与用户相关的操作。
//MyBatis 集成：
//使用了 MyBatis 框架的 @Param 注解，将方法参数绑定到 SQL 语句中的命名参数，使得 SQL 语句更加清晰和灵活。